/**
 * 认证相关类型定义
 * 定义了影响者监控扩展中所有与用户认证相关的数据结构
 */

/**
 * 用户信息接口
 * 定义了扩展中用户的基本信息结构
 */
export interface AuthUser {
  /** 用户唯一标识符，支持数字或字符串类型 */
  id: number | string
  /** 用户显示名称，可选 */
  name?: string
  /** 用户邮箱地址，可选 */
  email?: string
  /** 用户头像URL，可选 */
  avatar?: string
  /** 允许添加其他自定义属性 */
  [key: string]: any
}

/**
 * 认证数据接口
 * 定义了从网站获取的认证信息结构
 */
export interface AuthData {
  /** 用户的身份状态：已认证或未认证 */
  status: 'authenticated' | 'unauthenticated'
  /** 访问令牌，可选 */
  token?: string
  /** 用户信息对象，可选 */
  user?: AuthUser
  /** 数据获取时间戳（毫秒） */
  timestamp: number
  /** 令牌过期时间戳（毫秒），可选 */
  expiry?: number
  /** 认证域名，可选 */
  domain?: string
  /** 登录页面URL，可选 */
  loginUrl?: string
}

/**
 * 扩展认证状态接口
 * 定义了扩展内部维护的认证状态信息
 */
export interface ExtensionAuthState {
  /** 当前认证的域名，可选 */
  domain?: string
  /** 令牌过期时间戳（毫秒），可选 */
  expiry?: number
  /** 登录页面URL，可选 */
  loginUrl?: string
  /** 认证状态：已认证或未认证 */
  status: 'authenticated' | 'unauthenticated'
  /** 状态更新时间戳（毫秒） */
  timestamp: number
  /** 访问令牌，可为null */
  token: string | null
  /** 是否已认证的布尔值 */
  isAuthenticated: boolean
  /** 用户信息对象，可为null */
  user: AuthUser | null
  /** 最后同步时间戳（毫秒） */
  lastSync: number
  /** 数据来源：本地存储、扩展、内容脚本或无来源 */
  source: 'localStorage' | 'extension' | 'content-script' | 'none'
}

/**
 * 认证事件详情接口
 * 定义了认证状态变化时触发的事件数据结构
 */
export interface AuthEventDetail {
  /** 事件类型：登录或登出 */
  type: 'influ_watch_dog_login' | 'influ_watch_dog_logout'
  /** 认证数据对象 */
  data: AuthData
  /** 事件触发时间戳（毫秒） */
  timestamp: number
}
